/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.uca.dss.curso2011.grupo1.interfazExtendido;

import java.util.ArrayList;
import org.joda.time.LocalTime;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Random;
import org.joda.time.LocalDate;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.uca.dss.curso2011.grupo1.reservas.GestionReservasExtendidas;
import static org.junit.Assert.*;

/**
 * Casos de Tests de listados
 * @author dmolina
 */
public class InterfazListadosTestExtendido extends InterfazTestExtendido {

    /**
     * Comprueba que para fechas iguales (sin reservas) los itinerarios coinciden
     */
    @Test
    public void testListadoSinReservasPorDias() {
        int days = 10;
        List<Itinerario> itinerariosRef = listado.getItinerarios(origen, destino, new LocalDate());

        for (int day = 1; day <= 10; day++) {
            List<Itinerario> itinerariosAntes = listado.getItinerarios(origen, destino, new LocalDate().minusDays(day));
            List<Itinerario> itinerariosDespues = listado.getItinerarios(origen, destino, new LocalDate().plusDays(day));
            assertEquals(itinerariosAntes, itinerariosRef);
            assertEquals(itinerariosRef, itinerariosDespues);
        }
    }


    /**
     * Compruebo
     */
    @Test
    public void testListadosConHorariosLlenos() {


        List<Itinerario> itinerarios = listado.getItinerarios(origen, destino, hoy);

        Random random = new Random();
        int pos = random.nextInt(itinerarios.size());

        Itinerario itinerarioElegido = itinerarios.get(pos);
        // Reservo hasta que no puedo puedo más
        while (compras.asientosLibres(hoy, itinerarioElegido )>0) {
            compras.reservaAsiento(itinerarioElegido, hoy);
        }

        List<Itinerario> itinerarios2 = listado.getItinerarios(origen, destino, hoy);

        // Filtro quitando todos los itinerarios que tienen algún trayecto de este ocupado.
        List<Itinerario> itinerariosDisponibles = new ArrayList<Itinerario>();

        for(Itinerario itinerario : itinerarios)
        {   boolean disponible = true;
            for (InformacionTrayecto informacionTrayecto: itinerarioElegido){
                if(itinerario.contains(informacionTrayecto)){
                   disponible = false;
                }
            }

            if(disponible){
                itinerariosDisponibles.add(itinerario);
            }
        }

        // Compruebo que ese horario ha desaparecido
        assertEquals("No coinciden los horarios", itinerariosDisponibles,
                                                  itinerarios2);
    }
   
}